<?php

namespace app\command;

use think\Cache;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\Db;

class OrderConsumer extends Command
{
    protected function configure()
    {
        $this->setName('order:consumer')->setDescription('处理订单队列');
    }

    protected function execute(Input $input, Output $output)
    {
       $redis = Cache::store('redis')->handler();
       $output->writeln('[' . date('Y-m-d H:i:s') . '] 订单消费者已启动...');
       while (true){
           // 从队列右侧取出订单（阻塞式，30秒超时）
           $data = $redis->brPop('order:queue',30);
           if($data){
               $orderData = json_decode($data[1], true);
               try {
                   // 生成订单号
                   $orderData['order_sn'] = date('YmdHis') . mt_rand(1000, 9999);

                   // 写入数据库
                   Db::name('goods_orders')->insert($orderData);

                   $output->writeln('订单创建成功: ' . $orderData['order_sn']);
               } catch (\Exception $e) {
                   $output->writeln('订单创建失败: ' . $e->getMessage());

                   // 失败处理：记录日志或加入重试队列
                    $redis->lPush('order:retry', $data[1]);
               }
           } else {
               $output->writeln('等待订单中...');
           }
       }
    }
}